﻿using System;
using System.Collections.Generic;

namespace Hxsoft
{
	/// <summary>
	/// 枚举扩展类。
	/// </summary>
	public static partial class EnumExtensions
	{
		public static object Parse(Type enumType, string value)
		{
			return Enum.Parse(enumType, value);
		}

		public static object Parse(Type enumType, string value, bool ignoreCase)
		{
			return Enum.Parse(enumType, value, ignoreCase);
		}



		/// <summary>
		/// 获取指定类型的枚举值，以数组对象返回枚举各个值。
		/// </summary>
		/// <typeparam name="T">指定的枚举类型。</typeparam>
		/// <returns>指定类型的枚举值。</returns>
		public static Array GetValues<T>()
		{
			return Enum.GetValues(typeof(T));
		}

		/// <summary>
		/// 获取指定类型的枚举值，以数组对象返回枚举各个值。
		/// </summary>
		/// <param name="t">指定的枚举类型。</param>
		/// <returns>指定类型的枚举值。</returns>
		public static Array GetValues(Type t)
		{
			return Enum.GetValues(t);
		}





		/// <summary>
		/// 获取枚举名称字典。
		/// </summary>
		/// <typeparam name="T">枚举的类型。</typeparam>
		/// <param name="getText">获取名称的方法。</param>
		/// <returns>枚举名称字典。</returns>
		public static Dictionary<T, string> GetEnumDictionary<T>(GetEnumItemText<T> getText) where T : struct
		{
			Dictionary<T, string> dic = new Dictionary<T, string>();
			Array items = Enum.GetValues(typeof(T));
			foreach (T item in items)
			{
				dic[item] = getText == null ? item.ToString() : getText(item);
			}
			return dic;
		}
	}


	public delegate string GetEnumItemText<T>(T t);
}